Read the merge-method restriction against the live ruleset - #233
Merged
iderex merged 1 commit intoSep 1, 2026
Merged
Conversation
The parity walk's parameter table gave `allowed_merge_methods` the value
`["merge","squash","rebase"]` and a verdict of "Change owed", and the
subsection under it said in as many words that the restriction is not in
place and that the only thing standing against a squash is whoever picks
the button. The parameter reads `["merge"]` now:
gh api repos/Flowfin/lab/rules/branches/main \
--jq '.[] | select(.type=="pull_request") | .parameters.allowed_merge_methods'
["merge"]
Both statements were correct when they were written and stopped
reproducing when the setting was edited. What that prevents is the
reading a stale gap invites: a document whose subject is what stands
behind a merge, describing an open hole that has been closed, in the one
row of the table a reader is most likely to act on.
The reason for the restriction stays here rather than moving to the
issue that asked for it, because the parameter lives on a ruleset that
is not in this tree and carries no comment of its own, so this section
is the only place a reader who finds `["merge"]` can learn why. What is
added beside it is the bound: no check here reads the parameter, a run
stays green whichever way it is set, and switching it back is one edit.
Three further sentences resting on the older value are repaired in the
same pass. The table's preamble said all but the first row held the same
value on both boards, and all nine do now. The row itself says which
value moved and when. The signature subsection called
`allowed_merge_methods` the only ruleset edit this document asks for,
and the one it still asks for is the required status checks issue #26
assembles.
Refs #55
Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
iderex
deleted the
parity/the-merge-methods-are-restricted-and-the-walk-says-so
branch
September 1, 2026 09:14
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #55
What was wrong
The parity walk's parameter table gave
allowed_merge_methodsthe value["merge","squash","rebase"]here and a verdict ofChange owed, and thesubsection under it,
### Why the merge methods are not a style preference,said in as many words that the restriction is not in place and that the only
thing standing against a squash merge is whoever picks the button.
Both statements were correct at every reading recorded on #55, from 2026-08-10
to 2026-08-30. Neither reproduces now:
I found it by running the command before quoting the row back rather than by
reading the prose, which is the only way this class is found on this document -
a claim about a live setting reads the same whether or not the setting still
says it. This is the fifth instance recorded in that section and the first in
this direction: every earlier one was a gap the document claimed was closed or
a paste whose output had moved, and this one is a gap the document claimed was
open after it had been closed. A stale sentence claiming a hole that no longer
exists is as wrong as a stale sentence claiming one that does, and it is worse
placed, because it sits in the one row of the table a reader is most likely to
act on.
What changed
Four sentences, all inside the two subsections #55 built, all resting on the
older value.
["merge"]on both sides, says it is the only row in thistable whose value has ever moved, says what it read until 2026-08-30, and
sends the reader to the subsection for the reason.
two paragraphs deriving it from record
0004's removal line and record0005's promotion range are unchanged; what is added is why the reason livesin this tree at all - the parameter is on a ruleset that is not here and
carries no comment of its own, so a reader who finds
["merge"]and wants toknow why has this section and nothing else.
boards. All nine do now, because the first row is the one that moved and it
moved towards the target.
allowed_merge_methodsthe only ruleset editthis document asks for. The one it still asks for is the required status
checks Make the surviving checks required on the default branch #26 assembles.
The bound, stated rather than softened
The new paragraph says what the restriction is not: no check in this tree reads
allowed_merge_methods, a run here stays green whichever way it is set, and theedit that restores
squashandrebasecosts about what the one that removedthem cost. What refuses a squash today is the platform, and what would notice it
being switched back is somebody re-running the pasted command. That is the same
bound
### What this walk cannot dostates for the whole document, and this rowdoes not escape it.
Where the done-when of #55 stands
Met, and re-read for this change:
Four types here and five at the target, which is the table under
### The rule typesunchanged. The one difference left to explain isrequired_status_checks, and its row already names #26 as what assembles it.for each change. Met. Nine names on each side, and every row returns the
value the table gives it:
The merge methods restricted to the set that section names, with the reason
written at the restriction. The restriction was made on the ruleset, which
nothing in this tree reaches; the paste at the top of this body is it read
back. The reason at the restriction is what this change writes.
The section names issue Decisions of mine this plan does not take #46 for the one decision it does not take. Met,
and unchanged here. The section names Decisions of mine this plan does not take #46 and also names
docs/decisions/0023-signed-commits-on-the-default-branch.md, which is wherethe answer lives.
The means
Markdown prose in a document that already exists. The change is a repair to
four sentences of a walk, it adds no language, no runtime and no dependency,
and there is nothing here for a suite to test that a suite could test - which
is the same reason
### What this walk cannot dogives for the document as awhole.
What I ran
The four commands
CONTRIBUTING.mdasks for before a push, at this head:gofmt -lprinted nothing, which is its passing result, and the suite passed.The runner over this tree:
No Go file is touched by this change, so none of the four could have been
expected to bite on it. They are run and reported because a change that skipped
them and a change that passed them read the same afterwards.
What this change does not do
It does not touch
## The gap this rests onor## Which contexts arrive, and on which pull requests, which are #26's and #62's subjects, nor any row in## The table. The whole diff is inside### The pull-request rule, parameter by parameter,### Why the merge methods are not a style preferenceand one sentence of### The rule both boards carry now, and the condition it arrived ahead of.It changes no setting. The ruleset edit this body reads back was made before
this branch existed and nothing here could have made it.
Reading
Nobody but me has read this change. The evidence above stands in place of a
second reader: every claim it makes is a command and its output rather than a
conclusion, and each one is re-runnable by whoever reads it next.